
#ifndef IDictionary_h
#define IDictionary_h

// C# includes.
#include <Typedef.h>
#include <Defines.h>
#include <CSharpPropertyMethods.h>

// Riccsson includes.
#include <System/Object.h>
#include <System/Collections/ICollection.h>
#include <System/Collections/IEnumerable.h>
#include <System/Collections/IDictionaryEnumerator.h>

namespace Riccsson
{
	namespace System
	{
		namespace Collections
		{
			// Summary:
			//     Represents a nongeneric collection of key/value pairs.
			interface IDictionary
				: public Riccsson::System::Collections::ICollection
			{
				// Summary:
				//     Gets a value indicating whether the System.Collections.IDictionary object
				//     has a fixed size.
				//
				// Returns:
				//     true if the System.Collections.IDictionary object has a fixed size; otherwise,
				//     false.
				PROP3_GET(bool, IsFixedSize)
				{
					throw;
				}

				//
				// Summary:
				//     Gets a value indicating whether the System.Collections.IDictionary object
				//     is read-only.
				//
				// Returns:
				//     true if the System.Collections.IDictionary object is read-only; otherwise,
				//     false.
				PROP3_GET(bool, IsReadOnly)
				{
					throw;
				}

				//
				// Summary:
				//     Gets an System.Collections.ICollection object containing the keys of the
				//     System.Collections.IDictionary object.
				//
				// Returns:
				//     An System.Collections.ICollection object containing the keys of the System.Collections.IDictionary
				//     object.
				PROP3_GET(ICollection*, Keys)
				{
					throw;
				}

				//
				// Summary:
				//     Gets an System.Collections.ICollection object containing the values in the
				//     System.Collections.IDictionary object.
				//
				// Returns:
				//     An System.Collections.ICollection object containing the values in the System.Collections.IDictionary
				//     object.
				PROP3_GET(ICollection*, Values)
				{
					throw;
				}

				// Summary:
				//     Gets or sets the element with the specified key.
				//
				// Parameters:
				//   key:
				//     The key of the element to get or set.
				//
				// Returns:
				//     The element with the specified key, or null if the key does not exist.
				//
				// Exceptions:
				//   System.ArgumentNullException:
				//     key is null.
				//
				//   System.NotSupportedException:
				//     The property is set and the System.Collections.IDictionary object is read-only.-or-
				//     The property is set, key does not exist in the collection, and the System.Collections.IDictionary
				//     has a fixed size.
				//object this[object key] { get; set; }

				// Summary:
				//     Adds an element with the provided key and value to the System.Collections.IDictionary
				//     object.
				//
				// Parameters:
				//   key:
				//     The System.Object to use as the key of the element to add.
				//
				//   value:
				//     The System.Object to use as the value of the element to add.
				//
				// Exceptions:
				//   System.ArgumentNullException:
				//     key is null.
				//
				//   System.ArgumentException:
				//     An element with the same key already exists in the System.Collections.IDictionary
				//     object.
				//
				//   System.NotSupportedException:
				//     The System.Collections.IDictionary is read-only.-or- The System.Collections.IDictionary
				//     has a fixed size.
				void Add(object* key, object* value)
				{
					throw;
				}

				//
				// Summary:
				//     Removes all elements from the System.Collections.IDictionary object.
				//
				// Exceptions:
				//   System.NotSupportedException:
				//     The System.Collections.IDictionary object is read-only.
				void Clear()
				{
					throw;
				}

				//
				// Summary:
				//     Determines whether the System.Collections.IDictionary object contains an
				//     element with the specified key.
				//
				// Parameters:
				//   key:
				//     The key to locate in the System.Collections.IDictionary object.
				//
				// Returns:
				//     true if the System.Collections.IDictionary contains an element with the key;
				//     otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentNullException:
				//     key is null.
				bool Contains(object* key)
				{
					throw;
				}

				//
				// Summary:
				//     Returns an System.Collections.IDictionaryEnumerator object for the System.Collections.IDictionary
				//     object.
				//
				// Returns:
				//     An System.Collections.IDictionaryEnumerator object for the System.Collections.IDictionary
				//     object.
				IDictionaryEnumerator* GetEnumerator()
				{
					throw;
				}

				//
				// Summary:
				//     Removes the element with the specified key from the System.Collections.IDictionary
				//     object.
				//
				// Parameters:
				//   key:
				//     The key of the element to remove.
				//
				// Exceptions:
				//   System.ArgumentNullException:
				//     key is null.
				//
				//   System.NotSupportedException:
				//     The System.Collections.IDictionary object is read-only.-or- The System.Collections.IDictionary
				//     has a fixed size.
				bool /*void*/ Remove(object* key)
				{
					throw;
				}

			};
		}
	}
}

#endif // IENUMERATOR_H